package com.up.interview.redis.xianliu;

import java.util.concurrent.TimeUnit;

/**
 * @author: liuchengjun
 * @title: RateLimiter
 * @projectName: 海联技术中台V2.0
 * @depart 软件事业部
 * @description:
 * @date: 2025/10/21/周二 15:34 (星期二)
 * @since V2.0
 */
public interface RateLimiter {
    /**
     * 尝试获取一个许可（非阻塞）
     * @return true 表示获取成功，false 表示被限流
     */
    boolean tryAcquire();

    /**
     * 尝试获取一个许可（带超时等待）
     * @param timeout 超时时间
     * @param unit 时间单位
     * @return true 表示获取成功，false 表示超时或被限流
     * @throws InterruptedException 如果线程在等待时被中断
     */
    boolean tryAcquire(long timeout, TimeUnit unit) throws InterruptedException;

    /**
     * 获取当前剩余可用的许可数
     * @return 剩余可用许可数
     */
    long availablePermits();

    /**
     * 获取限流器的配置信息（如 QPS、窗口大小等）
     * @return 限流配置
     */
    RateLimitConfig getConfig();
}
